package com.jsong.linuo.operators;

/*
    逻辑运算符
    1.作用:连接多个判断
        eg: 判断值是否在1~100之间   i>=1 && i<=100
    2.结果为boolean型
    3.开发过程中判断用双
 */
public class LogicalOperator {
    public static void main(String[] args) {
        int i = 10;
        int j = 20;
        int m = 10;
        int a = 10;
        int b = 20;
        int c = 10;
        int d = 20;

        /*
            & 单与
                1.前后都是布尔型,有假则假,如果前一个是false,符号后的判断也会继续执行
                2.如果前后都是数字,看作位运算符

            && 双与
                有假则假,会有短路效果,如果前面是false后面就不会计算了

         */
        //&& 与,并且 有假则假
        boolean result01 = (i > j) && (i == m);
        System.out.println("result01 = " + result01);//false

        //短路效果
        boolean result05 = (++a > 100) && (++b > 10);
        System.out.println("result05 = " + result05);//false
        System.out.println("a = " + a);//11
        System.out.println("b = " + b);//20

        /*
            | 单或
                1.前后都是boolean,有真则真,如果符号前为true,符号后的判断也会继续执行
                2.前后都是数字,看作位运算符
            || 双或
                有真则真,如果符号前为true,则符号后的判断不会执行
         */
        // || 或 有真则真
        boolean result02 = (i > j) || (i == m);
        System.out.println("result02 = " + result02);//true

        //短路或
        boolean result06 = (++c < 100) || (++d > 10);
        System.out.println("result06 = " + result06);//true
        System.out.println("c = " + c);//11
        System.out.println("d = " + d);//20


        // ^ 异或 符号前后结果一样为false,前后不一样为true
        boolean result03 = (i > j) ^ (i == m);//false ^ true
        System.out.println("result03 = " + result03);//true

        //   ! 非,取反  与原值相反
        boolean result04 = !(i > j);
        System.out.println("result04 = " + result04);//true

    }
}
